<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.math.BigDecimal"%>
<%@page import="inet.db.tennis.TennisSeason"%>
<%@page import="inet.db.tennis.TennisPhase"%>
<%@page import="inet.util.StringTool"%>
<%@page import="inet.db.tennis.TennisMatch"%>
<%@page import="inet.db.tennis.buffer.TennisBuffer"%>
<%@page import="inet.db.tennis.TennisPlayer"%>
<%@page import="inet.db.tennis.TennisMatchGame"%>
<%@page import="inet.db.tennis.TennisSet"%>
<%@page import="inet.db.tennis.TennisGame"%>
<%@page import="inet.db.tennis.TennisConst"%>
<%@page import="inet.db.tennis.TennisEvent"%>
<jsp:useBean id="tennisMatchDAO" class="inet.db.tennis.TennisMatchDAO" scope="session"/>
<jsp:useBean id="tennisGameDAO" class="inet.db.tennis.TennisGameDAO" scope="session"/>
<jsp:useBean id="tennisSetDAO" class="inet.db.tennis.TennisSetDAO" scope="session"/>
<jsp:useBean id="tennisEventDAO" class="inet.db.tennis.TennisEventDAO" scope="session"/>
<%! 
	public boolean isWinSet(int score1, int score2) {
		if(score1 == 5 && score2 < 5) {
			return true;
		} else if (score1 == 6 && score2 <= 6) { // Trường hợp tỷ số SET là 6 - 6 or 6 - 5
			return true;
		}
		return false;
	}
	
	public boolean isWinSetUndo(int score1, int score2) {
		if(score1 == 6 && score2 < 5) {
			return true;
		} else if (score2 == 6 && score1 <= 5) {
			return true;
		} else if (score1 == 7 && score2 == 6) {
			return true;
		} else if (score2 == 7 && score1 == 6) {
			return true;
		}
		return false;
	}
	
	public boolean isWinMatch (int score1, int score2, int totalSet) {
		if( totalSet == 3) { // Trận đấu 3 set
			if(score1 == 1 ) {
				return true;
			}
		} else { // trận đấu 5 SET
			if(score1 == 2 ) {
				return true;
			}
		}
		return false;
	}
	
	public boolean isWinMatchUndo (int score1, int score2, int totalSet) {
		if( totalSet == 3) { // Trận đấu 3 set
			if(score1 == 2 || score2 == 2) {
				return true;
			}
		} else { // trận đấu 5 SET
			if(score1 == 3 || score2 == 3) {
				return true;
			}
		}
		return false;
	}
	
	public boolean isWinGame (String score1, String score2 ) {
		if("A".equals(score1)) {
			return true;
		} else if ( "40".equals(score1) && !"40".equals(score2) && !"A".equals(score2)) {
			return true;
		}
		return false;
	}
	
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Tường thuật trận đấu</title>
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/admin/tennis/css/reset.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/admin/tennis/css/text.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/admin/tennis/css/grid.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/admin/tennis/css/layout.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/admin/tennis/css/nav.css" media="screen" />
    <!--[if IE 6]><link rel="stylesheet" type="text/css" href="css/ie6.css" media="screen" /><![endif]-->
    <!--[if IE 7]><link rel="stylesheet" type="text/css" href="css/ie.css" media="screen" /><![endif]-->
    <link href="<%= request.getContextPath() %>/admin/tennis/css/table/demo_page.css" rel="stylesheet" type="text/css" />
    <link href="<%= request.getContextPath() %>/admin/tennis/css/style.css" rel="stylesheet" type="text/css" />
    <link href="<%= request.getContextPath() %>/admin/tennis/css/fancy-button/fancy-button-tt.css" rel="stylesheet" type="text/css" />
    <!-- BEGIN: load jquery -->
    <script src="http://static.bongda.wap.vn/js/jquery.tools.min.js"></script>
    <!-- END: load jquery -->
    <script type="text/javascript" src="<%= request.getContextPath() %>/admin/tennis/js/table/table.js"></script>
    <script src="<%= request.getContextPath() %>/admin/tennis/js/setup.js" type="text/javascript"></script>
    <script src="<%= request.getContextPath() %>/admin/tennis/js/fancy-button/fancy-button.js" type="text/javascript"></script>
    <script src="<%= request.getContextPath() %>/admin/tennis/js/tiny-mce/jquery.tinymce.js" type="text/javascript"></script>
    <script type="text/javascript">
    	function f_delete_select_item() {
    		document.formLive.action.value = 'delete_selected';
    		document.formLive.submit();
    	}
    	function f_increase_score1() {
			document.formLive.action.value = 'INCREASE_PLAYER1';
    		document.formLive.submit();
		}
    	function f_increase_score2() {
			document.formLive.action.value = 'INCREASE_PLAYER2';
    		document.formLive.submit();
		}
    	function f_change_serve1() {
			document.formLive.action.value = 'PLAYER1_SERVE';
    		document.formLive.submit();
		}
    	function f_change_serve2() {
			document.formLive.action.value = 'PLAYER2_SERVE';
    		document.formLive.submit();
		}
		function f_undo() {
			document.formLive.action.value = 'UNDO';
    		document.formLive.submit();
		}
    </script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('input[type="radio"]').fancybutton();
        });
    </script>
</head>
<body onload="dm();">
    <div class="container_12">
        <%@ include file="../include/header.jsp" %>
        <%  
        	response.setCharacterEncoding("utf-8");
        	request.setCharacterEncoding("utf-8");
        	String sId = request.getParameter("id");
        	if( sId == null || !StringTool.isNumberic(sId)) {
        		sId = "0";
        	}
        	String sAction = request.getParameter("action");
        	TennisMatch match = null;
        	int TYPE_GAME = 0;
        	int TYPE_SET = 1;
        	int TYPE_TIA_BREAK = 2;
        	
        	int SPECIAL_POINT_DEFAULT = 0;
        	int SPECIAL_BREAK_POINT = 1;
        	int SPECIAL_SET_POINT = 2;
        	int SPECIAL_MATCH_POINT = 3;
        	int SPECIAL_MATCH_POINT_SET_POINT = 4;
        	
        	// Xác định tay vợt đang giao bóng.
        	int currentServe = 1; // Giả sử là player 1. (Sẽ tạo phần cài đặt cho người dùng chọn tay vợt giao bóng.)
        	String sCurrentServe = request.getParameter("rdoServe");
        	if( sCurrentServe != null && StringTool.isNumberic(sCurrentServe)){
        		currentServe = Integer.parseInt(sCurrentServe);
        	}
        	String sStatus = request.getParameter("clbStatus");
        	int iStatus = 0;
        	if(sStatus != null && StringTool.isNumberic(sStatus)) {
        		iStatus = Integer.parseInt(sStatus);
        	}
        	// Xác định điểm game đấu
        	int gameType = TennisGame.TYPE_GAME; // Mặc định là 0.
        	
        	// Điểm đặc biệt
        	int specialPoint = SPECIAL_POINT_DEFAULT;
        	// point
        	String point1 = "";
        	String point2 = "";
        	
        	// Xử lý nút undo
        	if("UNDO".equals(sAction)) {
        		match = tennisMatchDAO.getMatchResult(new BigDecimal(sId)); // Cần check lại lấy các thông tin cần thiết.
                // Kiểm tra current game point 1,2 trong bảng TENNIS MATCH
                // Nếu currentGamePoint1 != 0 currentGamePoint2 != 0
                if(!"0".equals(match.getCurrentGamePoint1()) || !"0".equals(match.getCurrentGamePoint2())) {
                	//==> chỉ cần xóa Bản ghi mới nhất ở bảng TENNIS_EVENT ==> lấy đc bản ghi mới nhất # trong bảng EVENT Update vào bảng TENNIS_MATCH
					// Update người giao bóng trong game đấu hiện tại vào TENNIS_MATCH.(Trường hợp là tie-break ==> lấy người giao bóng ở bảng TEnnis_event)
					// Lấy game đấu hiện tại
					TennisGame currentGame = tennisGameDAO.getRow(match.getCurrentGameId());
					// Lấy id bản ghi mới nhất của Trận đấu ở bảng TENNIS_EVENT
					BigDecimal maxIdOfMatchInEventTable = tennisEventDAO.getMaxIdOfMatch(match.getId(), match.getCurrentGameId());
					// Xóa bản ghi này
					tennisEventDAO.deleteRow(maxIdOfMatchInEventTable);
					// Lấy bản ghi mới nhất.
					TennisEvent lastEvent = tennisEventDAO.getLastRecordOfMatch(match.getId(), match.getCurrentGameId());
					if(lastEvent == null){
						//Diem Tro ve 0 - 0
						tennisMatchDAO.updateCurrentPointAndServe(match.getId(), "0", "0", currentGame.getServe());
					} else {
						if(currentGame.getType() == TennisGame.TYPE_TIE_BREAK){
							int totalTieBreak = Integer.parseInt(lastEvent.getScore1()) + Integer.parseInt(lastEvent.getScore2()) - 1;
							System.out.println("totalTieBreak="+totalTieBreak);
							if(totalTieBreak != 0 && totalTieBreak % 2 == 0) {
								if(lastEvent.getServe() == 1) currentServe = 2;
								else if (lastEvent.getServe() == 2) currentServe = 1;
							} else {
								currentServe = lastEvent.getServe();
							}
							System.out.println("currentServe="+currentServe);
							tennisMatchDAO.updateCurrentPointAndServe(match.getId(), lastEvent.getScore1(), lastEvent.getScore2(), currentServe);
						} else {
							tennisMatchDAO.updateCurrentPointAndServe(match.getId(), lastEvent.getScore1(), lastEvent.getScore2(), currentGame.getServe());
						}
					}
				// Xong trường hợp khác 0
                } else {
                	// Trường hợp cả currentGamePoint1 == 0 currentGamePoint2 == 0
                	// Lấy bản ghi mới nhất ở bảng event.
                	TennisEvent lastEvent = tennisEventDAO.getLastRecordOfMatch(match.getId());
                	// Nếu lastEvent == null ==> Hiện tại là mới bắt đầu trận đấu, chưa có event nào.
                	// Kiểm tra xem trận đấu đã kết thúc chưa.
                	if(lastEvent != null && match.getStatus() == TennisConst.MATCH_STATUS_KET_THUC) {
                		TennisGame lastGame = null;
                		if(match.getCurrentGameId().equals(BigDecimal.ZERO)) {
                			lastGame = tennisGameDAO.getLastRecord(match.getId());
                		} else {
                			lastGame = tennisGameDAO.getRow(match.getCurrentGameId());
                		}
                		String score1 = "";
                		String score2 = "";
                		boolean isFirstPlayerWin = false;
                		int serve = 1;
                		if(lastGame.getType() == TennisGame.TYPE_TIE_BREAK) {
	                		int tieBreak1 = Integer.parseInt(lastEvent.getScore1());
	                		int tieBreak2 = Integer.parseInt(lastEvent.getScore2());
	                		
	                		if( tieBreak1 > tieBreak2 ) { 
	                			score1 = String.valueOf(tieBreak1 - 1);
	                			score2 = lastEvent.getScore2();
	                			isFirstPlayerWin = true;
	                		} else { 
	                			score1 = lastEvent.getScore1();
	                			score2 = String.valueOf(tieBreak2 - 1);;
	                		}
	                		serve = lastEvent.getServe();
	                		// Xóa last Event
	                		tennisEventDAO.deleteRow(lastEvent.getId());
	                	} else {
	                		if( ("A".equals(lastEvent.getScore1()) && !"A".equals(lastEvent.getScore2())) 
	                			|| ("40".equals(lastEvent.getScore1()) && !"A".equals(lastEvent.getScore2()) && !"40".equals(lastEvent.getScore2()) ) ) {
	                			isFirstPlayerWin = true;
	                		}
	                		score1 = lastEvent.getScore1();
	                		score2 = lastEvent.getScore2();
	                		serve = lastGame.getServe();
	                	}
	                	int matchScore1 = 0;
	                	int matchScore2 = 0;
	                	int gameScore1 = 0;
	                	int gameScore2 = 0;
                		if(isFirstPlayerWin){
                			matchScore1 = match.getFirstScore() - 1;
                			matchScore2 = match.getSecondScore();
                			tennisGameDAO.updateScore(lastGame.getId(), lastGame.getScore1() - 1, lastGame.getScore2(), serve);
                			tennisSetDAO.updateScore(lastGame.getSetId(), lastGame.getScore1() - 1, lastGame.getScore2(), 0, 0, TennisSet.SET_STATUS_ONGOING);
                		} else {
                			matchScore1 = match.getFirstScore();
                			matchScore2 = match.getSecondScore() - 1;
                			tennisGameDAO.updateScore(lastGame.getId(), lastGame.getScore1(), lastGame.getScore2() - 1, serve);
                			tennisSetDAO.updateScore(lastGame.getSetId(), lastGame.getScore1(), lastGame.getScore2() - 1, 0, 0, TennisSet.SET_STATUS_ONGOING);
                		}
                		tennisMatchDAO.updateCurrentInfo(match.getId(), matchScore1, matchScore2, score1, score2, serve, match.getCurrentSet(), match.getCurrentSet(), lastGame.getId());
                		
                	}
                	// Chỉ check trường hợp last event != null
                	else if(lastEvent != null) {
                		// Xóa game đấu hiện tại
	                	tennisGameDAO.deleteRow(match.getCurrentGameId());
	                	// Lấy bản ghi gần nhất của game đấu.
	                	TennisGame lastGame = tennisGameDAO.getLastRecord(match.getId());
	                	//////////////////// Nếu thắng GAME đấu. ( == 0 và không thắng SET (kiểm tra điểm của SET) )
						/// Xóa bản ghi mới tạo ra ở bảng TENNIS_GAME. (CURRENT_GAME)
						/// Lấy ra bản ghi mới nhất của GAME Đấu của SET.(2) 
						/// Dựa vào bản ghi mới nhất của Event xác định tay vợt nào vừa thắng Game đấu (1)
						// ==> Trừ 1 điểm đối vs tay vợt đó ở bảng TENNIS_SET. 
						// ==> Trừ 1 điểm đối vs tay vợt đó ở bảng TENNIS_GAME. 
						// ==> Update lại điểm của (1) vào bản TENNIS_MATCH vs CURRENT_GAME = ID, người giao bóng (2)
						String score1 = "";
						String score2 = ""; 
						int serve = 1;
						boolean isFirstPlayerWin = false;
	                	if(lastGame.getType() == TennisGame.TYPE_TIE_BREAK) {
	                		int tieBreak1 = Integer.parseInt(lastEvent.getScore1());
	                		int tieBreak2 = Integer.parseInt(lastEvent.getScore2());
	                		
	                		if( tieBreak1 > tieBreak2 ) { 
	                			score1 = String.valueOf(tieBreak1 - 1);
	                			score2 = lastEvent.getScore2();
	                			isFirstPlayerWin = true;
	                		} else { 
	                			score1 = lastEvent.getScore1();
	                			score2 = String.valueOf(tieBreak2 - 1);;
	                		}
	                		serve = lastEvent.getServe();
	                		// Xóa last Event
	                		tennisEventDAO.deleteRow(lastEvent.getId());
	                	} else {
	                		if( ("A".equals(lastEvent.getScore1()) && !"A".equals(lastEvent.getScore2())) 
	                			|| ("40".equals(lastEvent.getScore1()) && !"A".equals(lastEvent.getScore2()) && !"40".equals(lastEvent.getScore2()) ) ) {
	                			isFirstPlayerWin = true;
	                		}
	                		score1 = lastEvent.getScore1();
	                		score2 = lastEvent.getScore2();
	                		serve = lastGame.getServe();
	                	}
	                	// ==> Trừ 1 điểm đối vs tay vợt thắng ở bảng TENNIS_GAME.
	                	if(isFirstPlayerWin){
	                		tennisGameDAO.updateScore(lastGame.getId(), lastGame.getScore1() - 1, lastGame.getScore2());
	                	} else {
	                		tennisGameDAO.updateScore(lastGame.getId(), lastGame.getScore1(), lastGame.getScore2() - 1);
	                	}
	                	
	                	TennisSet lastSet = tennisSetDAO.getRow(lastGame.getSetId());
						// Kiểm tra xem có phải thắng SET đấu hay không
						if(lastSet != null && isWinSetUndo(lastSet.getScore1(), lastSet.getScore2()) ) {
							// Xóa set mới tạo ra ở bảng TENNIS_SET
							tennisSetDAO.deleteRow(match.getId(), match.getCurrentSet());
		                	// Update trạng thái trận đấu về set đấu gần nhất, giảm điểm của tay vợt thắng.
							if(isFirstPlayerWin) {
								tennisMatchDAO.updateCurrentInfo(match.getId(), match.getFirstScore()-1, match.getSecondScore(), score1, score2, serve, lastSet.getValue(), lastSet.getValue(), lastGame.getId());
							} else {
								tennisMatchDAO.updateCurrentInfo(match.getId(), match.getFirstScore(), match.getSecondScore()-1, score1, score2, serve, lastSet.getValue(), lastSet.getValue(), lastGame.getId());
							}
						} else {
							tennisMatchDAO.updateCurrentInfo(match.getId(), score1, score2, serve, lastSet.getValue(), lastGame.getId());
						}
						// Update lại Điểm set đấu.
						if(isFirstPlayerWin){
	                		tennisSetDAO.updateScore(lastSet.getId(), lastSet.getScore1() - 1, lastSet.getScore2(), 0, 0, TennisSet.SET_STATUS_ONGOING);
	                	} else {
	                		tennisSetDAO.updateScore(lastSet.getId(), lastSet.getScore1(), lastSet.getScore2() - 1, 0, 0, TennisSet.SET_STATUS_ONGOING);
	                	}
	                	
						//////////////////// Nếu thắng SET đấu
						// Kiểm tra xem có thắng bằng Tie-break hay không.
						// ------------- Nếu thắng bằng Tie-break 
						// Xóa thêm bản ghi mới nhất ở bảng Tennis_event.
						// Xác định tay vợt giao bóng bằng Serve ở bảng Tennis_event.
						
						// ------------- Nếu thắng bình thường
						// Xóa SET mới tạo ra ở bảng TENNIS_SET: currentSet bảng MATCH và MATCH_ID 
						// Xóa bản ghi mới tạo ra ở bảng TENNIS_GAME. (CURRENT_GAME)
						// Từ bảng SET lấy đc điểm SET( Bản ghi mới nhất) ==> tay vợt thắng trong SET đấu.
						// ==>Update giảm điểm SET đấu của tay vợt đi 1 điểm.
						// ==>Update điểm GAME đấu của tay vợt giảm đi 1 điểm.
						// ==>Update bảng MATCH 
						////////=> Trường current game point = điểm cua bản ghi mới nhất trong bảng EVENT.
						////////=> Trường NGƯỜI giao bóng hiện tại = Người giao bóng hiện tại của GAME hiện tại.
						////////=> SET đấu hiện tại, Trạng thái = VALUE trong SET đấu mới nhất.
						////////=> giảm điểm của Trận đấu của tay vợt thắng đi 1.
		        	   /// Trường họp
                	}
                }
				
            } else 
        	// increase point for player 1
        	if("PLAYER1_SERVE".equals(sAction)) {
        		BigDecimal currentGameId = tennisMatchDAO.getCurrentGameId(new BigDecimal(sId));
        		tennisMatchDAO.updateCurrentServe(new BigDecimal(sId), 1);
        		tennisGameDAO.updateServe(currentGameId, 1); // Update lại người giao bóng của game hiện tại
        	} else if("PLAYER2_SERVE".equals(sAction)) {
        		BigDecimal currentGameId = tennisMatchDAO.getCurrentGameId(new BigDecimal(sId));
        		tennisMatchDAO.updateCurrentServe(new BigDecimal(sId), 2);
        		tennisGameDAO.updateServe(currentGameId, 2); // Update lại người giao bóng của game hiện tại
        	} else if("INCREASE_PLAYER1".equals(sAction) && iStatus != TennisConst.MATCH_STATUS_KET_THUC) {
        		// Lấy ra các thông tin hiện tại của trận đấu.
        	    match = tennisMatchDAO.getMatchResult(new BigDecimal(sId)); // Cần check lại lấy các thông tin cần thiết.
        	    String currentGamePoint2 = match.getCurrentGamePoint2(); // Lấy điểm hiện tại của tay vợt 2
        	    BigDecimal currentGameId = match.getCurrentGameId(); // Lấy id game đấu hiện tại
        	    TennisGame currentGame = tennisGameDAO.getRow(currentGameId); // Lấy ra thông tin game đấu hiện tại
        	    TennisSet currentSet = null;
        	    if(currentGame != null) {
        	    	currentSet = tennisSetDAO.getRow(currentGame.getSetId()); // Lấy ra thông tin SET đấu hiện tại
        	    }
        	    
        	    // Kiểm tra xem điểm SET đấu hiện tại có phải 6 - 6 ??? (==> đánh tia-break).
  	   	        if(currentSet != null && currentSet.getScore1() == 6 && currentSet.getScore2() == 6) {
					gameType = TennisGame.TYPE_TIE_BREAK; // Điểm game đấu là Tie-break
					// Điểm trong set TIE-Break đang cách 1. và gần 6
					int tieBreakScore1 = Integer.parseInt(match.getCurrentGamePoint1());
					int tieBreakScore2 = Integer.parseInt(match.getCurrentGamePoint2()); 
					if(tieBreakScore1 >= 6 && tieBreakScore1 - tieBreakScore2 >= 1) {
						// Thắng SET Tie-break ==> Thắng SET
						// Thêm 1 bản ghi vào bảng TENNIS_EVENT.
						tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), (tieBreakScore1+1)+"", tieBreakScore2+"", specialPoint, currentServe);
						
						// Update chuyển quyền giao bóng (Chuyển giao bóng cho Tay vợt không giao bóng đầu tiên trong SET hiện tại.)
						int firstServe = tennisGameDAO.getFirstPlayerServeInSet(currentSet.getId());
						if(firstServe == 1) currentServe = 2;
						else if (firstServe == 2) currentServe = 1;
						
						currentGame.setScore1(currentGame.getScore1() + 1); // tăng điểm lên 1
						// Update điểm game đấu
						tennisGameDAO.updateScore(currentGame.getId(), currentGame.getScore1(), currentGame.getScore2());
						// Update điểm tia-break vào SET đấu.
						tennisSetDAO.updateTieBreakScore(currentSet.getId(), currentGame.getScore1(), currentGame.getScore2(), tieBreakScore1+1, tieBreakScore2, TennisSet.SET_STATUS_FINISH);
						boolean isWinSet = false;
						boolean isWinMatch = false;
						if(isWinMatch(match.getFirstScore(), match.getSecondScore(), match.getTotalSet())) {
							// player 1 win match.
							// Update match score
							isWinMatch = true;
							match.setFirstScore(match.getFirstScore() + 1);
							tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), TennisConst.MATCH_STATUS_KET_THUC);
							// Update Id player win to next match.
							if(match.getStt() % 2 == 0){
								tennisMatchDAO.updateSecondPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
							} else {
								tennisMatchDAO.updateFirstPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
							}
						} else {
							// Chưa thắng Trận
							// Update match score và trạng thái trận đấu.
							match.setFirstScore(match.getFirstScore() + 1);
							tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), currentSet.getValue()+1);
							// Tạo 1 bản ghi mới cho SET (nếu set hiện tại < tổng số set của trận đấu). 
							if(currentSet.getValue() < match.getTotalSet()) {
								BigDecimal setId = tennisSetDAO.insertRow(match.getId(), currentSet.getValue()+1, TennisSet.SET_STATUS_ONGOING);
								// Tạo 1 bản ghi mới cho Game đấu.
								BigDecimal gameId = tennisGameDAO.insertRow(match.getId(), setId, currentServe, TennisGame.TYPE_GAME);
								// Update lại Game hiện tại, SET hiện tại, reset điểm hiện tại về 0 - 0 vào bảng TENNIS_MATCH.
								tennisMatchDAO.updateCurrentInfo(match.getId(), "0", "0", currentServe, currentSet.getValue()+1, gameId);
							}
						}
					} else {
						 //
						 // Trường hợp chưa thắng set tie-break
						 //
						tieBreakScore1 += 1;
						if( (tieBreakScore1 >= 6 && tieBreakScore1 - tieBreakScore2 >= 1) 
							|| (tieBreakScore2 >= 6 && tieBreakScore2 - tieBreakScore1 >= 1) ) {
							specialPoint = TennisEvent.SPECIAL_SET_POINT;
						}
						// Thêm 1 bản ghi vào bảng TENNIS_EVENT.
						tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), tieBreakScore1+"", tieBreakScore2+"", specialPoint, currentServe);
						if( tieBreakScore1 == 1 && tieBreakScore2 == 0) { // Loạt tie-break đầu tiên
							// Update chuyển quyền giao bóng cho tay vợt còn lại
							if(currentServe == 1) currentServe = 2;
							else if (currentServe == 2) currentServe = 1;
						} else {
							// Kiểm tra: nếu đã giao bóng 2 lần liên tiếp --> chuyển giao bóng.
							int totalTieBreak = tieBreakScore1 + tieBreakScore2 - 1;
							if(totalTieBreak != 0 && totalTieBreak % 2 == 0) {
								if(currentServe == 1) currentServe = 2;
								else if (currentServe == 2) currentServe = 1;
							}
							// Xong việc kiểm tra chuyển giao bóng
						}
						//tennisGameDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getScore1(), currentGame.getScore2(), currentServe, gameType);
						// Update điểm hiện tại vào bảng CURRENT_POINT của bảng TENNIS_MATCH
						tennisMatchDAO.updateCurrentPointAndServe(match.getId(), tieBreakScore1+"", tieBreakScore2+"", currentServe);
					}
  	   	        } else {
	        	    // Kiểm tra các trường hợp có thể tạo ra thắng (GAME/SET/MATCH)
	        	    if( isWinGame(match.getCurrentGamePoint1(), currentGamePoint2) ) {
	        	    	// Trường hợp thắng GAME đấu.
	        	    	if(currentServe == 1) currentServe = 2;
						else if (currentServe == 2) currentServe = 1;
	        	    	// Ghi dữ liệu vào bảng Tennis_Event
	        	    	BigDecimal nextSetId = BigDecimal.ZERO; 
	        	    	int nextSet = currentSet.getValue();
	        	    	// Kiểm tra xem có Thắng SET đấu không
	        	    	boolean isWinSet = false;
	        	    	boolean isWinMatch = false;
	        	    	if(isWinSet(currentSet.getScore1(), currentSet.getScore2())) {
	        	    		isWinSet = true;
	        	    		// Update Score, Trạng thái ở bảng TENNIS_SET
	        	    		tennisSetDAO.updateScore(currentSet.getId(), currentSet.getScore1() + 1, currentSet.getScore2(), TennisSet.SET_STATUS_FINISH);
	        	    		// Kiểm tra xem có win match hay không
	        	    		if(isWinMatch(match.getFirstScore(), match.getSecondScore(), match.getTotalSet())) {
	        	    			// win match
	        	    			isWinMatch = true;
	        	    			// Update lại SCORE ở bảng TENNIS_MATCH
								match.setFirstScore(match.getFirstScore() + 1);
								tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), TennisConst.MATCH_STATUS_KET_THUC);
								// Update ID player thắng vào trận đấu kế tiếp (nếu có) đc xác định bằng MAP_MATCH_ID
								if(match.getStt() % 2 == 0){
									tennisMatchDAO.updateSecondPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
								} else {
									tennisMatchDAO.updateFirstPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
								}
								//if(true)return;
	        	    		} else {
	        	    			nextSet = currentSet.getValue()+1;
	        	    			// Update lại SCORE và STATUS ở bảng TENNIS_MATCH
								match.setFirstScore(match.getFirstScore() + 1);
								tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), nextSet);
	        	    			// Tạo tiếp 1 bản ghi cho set MỚI (nếu set đấu hiện tại < tổng SET quy định của trận) cập nhật set hiện tại vào bảng football match.
	        	    			nextSetId = tennisSetDAO.insertRow(match.getId(), nextSet, TennisSet.SET_STATUS_ONGOING);
	        	    		}
	        	    	} else {
	        	    		// Không thắng SET.
	        	    		// Update lại SCORE ở bảng TENNIS_SET.
	        	    		tennisSetDAO.updateScore(currentSet.getId(), currentSet.getScore1() + 1, currentSet.getScore2(), TennisSet.SET_STATUS_ONGOING);
	        	    	}
	        	    	// Update Score vào bảng TENNIS_GAME
	        	    	tennisGameDAO.updateScore(currentGame.getId(), currentGame.getScore1()+ 1, currentGame.getScore2());
	        	    	// Tạo mới 1 bản ghi cho GAME Đấu tiếp theo.
	        	    	if( nextSetId.equals(BigDecimal.ZERO) ) {
	        	    		// Game đấu của SET hiện tại
	        	    		nextSetId = currentSet.getId();
	        	    	}
	        	    	BigDecimal nextGameId = BigDecimal.ZERO;
	        	    	// Trận đấu kết thúc thì không tạo thêm game đấu.
	        	    	if(isWinSet && !isWinMatch){
	        	    		nextGameId = tennisGameDAO.insertRow(match.getId(), nextSetId, 0, 0, currentServe, gameType);
	        	    	} else if(!isWinMatch) {
	        	    		if(currentSet.getScore1() == 5 && currentSet.getScore2() == 6){
	        	    			gameType = TennisGame.TYPE_TIE_BREAK;
	        	    		} else {
	        	    			gameType = TennisGame.TYPE_GAME;
	        	    		}
	        	    		nextGameId = tennisGameDAO.insertRow(match.getId(), nextSetId, currentSet.getScore1() + 1, currentSet.getScore2(), currentServe, gameType);
	        	    	}
	        	    	// Update tay vợt giao bóng, CurrentScore ở bảng TENNIS_MATCH.
	        	    	tennisMatchDAO.updateCurrentInfo(match.getId(), "0", "0", currentServe, nextSet, nextGameId);
	        	    } else {
	        	    	// Không thắng game đấu
	        	    	if ("40".equals(match.getCurrentGamePoint1()) && "A".equals(match.getCurrentGamePoint2())) {
	        	    		point1 = "40";
	        	    		match.setCurrentGamePoint2("40");
	        	    	} else if ("30".equals(match.getCurrentGamePoint1()) ) {
	        	    		// Xác định xem có phải là điểm đặc biệt không (Break point, SET point, match point)
		                    // Nếu point1 hiện tại = 30 và point2 <= 30 và tay vợt 2 đang cầm giao bóng => tay vợt 1 có cơ hội dành break point
		                    if(( !"A".equals(match.getCurrentGamePoint2()) && !"40".equals(match.getCurrentGamePoint2()) ) && currentServe == 2 ) {
		                        specialPoint = SPECIAL_BREAK_POINT;
		                        // kiểm tra xem có thể giành set point hay không.
		                        if( (currentSet.getScore1() == 5 || currentSet.getScore1() == 6) 
		                            && (currentSet.getScore1() - currentSet.getScore2() >= 1) ) {
		                            specialPoint = SPECIAL_MATCH_POINT_SET_POINT; // Tay vợt vừa giành được break-point vừa giành được SET point
		                        }
		                    }
		                    point1 = "40";
	        	    	} else if ("40".equals(match.getCurrentGamePoint1()) && "40".equals(match.getCurrentGamePoint2())) {
	        	    		// Xác định xem có phải là điểm đặc biệt không (Break point, SET point, match point)
		                    // Nếu point1 hiện tại = 30 và point2 <= 30 và tay vợt 2 đang cầm giao bóng => tay vợt 1 có cơ hội dành break point
		                    if( currentServe == 2 ) {
		                        specialPoint = SPECIAL_BREAK_POINT;
		                        // kiểm tra xem có thể giành set point hay không.
		                        if( (currentSet.getScore1() == 5 || currentSet.getScore1() == 6) 
		                            && (currentSet.getScore1() - currentSet.getScore2() >= 1) ) {
		                            specialPoint = SPECIAL_MATCH_POINT_SET_POINT; // Tay vợt vừa giành được break-point vừa giành được SET point
		                        }
		                    }
	                        point1 = "A";
	        	    	} else if("0".equals(match.getCurrentGamePoint1())) {
	                        point1 = "15";
	                    } else if ("15".equals(match.getCurrentGamePoint1())) {
	                        point1 = "30";
	                    }
	        	    	// Thêm event vào bảng TENNIS EVENT
	        	    	tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), point1, match.getCurrentGamePoint2(), specialPoint, currentServe);
	        	    	// Update Current Score Game vào bảng Tennis match.
	        	    	tennisMatchDAO.updateCurrentPointAndServe(match.getId(), point1, match.getCurrentGamePoint2(), currentServe, currentSet.getValue());
	        	    }
        	    }
        	   
        	// XỬ LÝ KHI CLICK INCREASE POINT FOR PLAYER 2
        	} else if("INCREASE_PLAYER2".equals(sAction) && iStatus != TennisConst.MATCH_STATUS_KET_THUC) {
        		// Lấy ra các thông tin hiện tại của trận đấu.
        	    match = tennisMatchDAO.getMatchResult(new BigDecimal(sId)); // Cần check lại lấy các thông tin cần thiết.
        	    String currentGamePoint1 = match.getCurrentGamePoint1(); // Lấy điểm hiện tại của tay vợt 1
        	    BigDecimal currentGameId = match.getCurrentGameId(); // Lấy id game đấu hiện tại
        	    TennisGame currentGame = tennisGameDAO.getRow(currentGameId); // Lấy ra thông tin game đấu hiện tại
        	    TennisSet currentSet = null;
        	    if(currentGame != null) {
        	    	currentSet = tennisSetDAO.getRow(currentGame.getSetId()); // Lấy ra thông tin SET đấu hiện tại
        	    }
        	    
        	    // Kiểm tra xem điểm SET đấu hiện tại có phải 6 - 6 ??? (==> đánh tia-break).
  	   	        if(currentSet != null && currentSet.getScore1() == 6 && currentSet.getScore2() == 6) {
					gameType = TennisGame.TYPE_TIE_BREAK; // Điểm game đấu là Tie-break
					// Điểm trong set TIE-Break đang cách 1. và gần 6
					int tieBreakScore1 = Integer.parseInt(match.getCurrentGamePoint1());
					int tieBreakScore2 = Integer.parseInt(match.getCurrentGamePoint2()); 
					if(tieBreakScore2 >= 6 && tieBreakScore2 - tieBreakScore1 >= 1) {
						// Thắng SET Tie-break ==> Thắng SET
						// Thêm 1 bản ghi vào bảng TENNIS_EVENT.
						tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), tieBreakScore1+"", (tieBreakScore2+1)+"", specialPoint, currentServe);
						// Update chuyển quyền giao bóng (Chuyển giao bóng cho Tay vợt không giao bóng đầu tiên trong SET hiện tại.)
						int firstServe = tennisGameDAO.getFirstPlayerServeInSet(currentSet.getId());
						if(firstServe == 1) currentServe = 2;
						else if (firstServe == 2) currentServe = 1;
						
						currentGame.setScore2(currentGame.getScore2() + 1); // tăng điểm lên 1
						// Update điểm game đấu
						tennisGameDAO.updateScore(currentGame.getId(), currentGame.getScore1(), currentGame.getScore2());
						// Update điểm tia-break vào SET đấu.
						tennisSetDAO.updateTieBreakScore(currentSet.getId(), currentGame.getScore1(), currentGame.getScore2(), tieBreakScore1, tieBreakScore2 + 1, TennisSet.SET_STATUS_FINISH);
						boolean isWinSet = false;
						boolean isWinMatch = false;
						if(isWinMatch(match.getSecondScore(), match.getFirstScore(), match.getTotalSet())) {
							// player 1 win match.
							// Update match score
							isWinMatch = true;
							match.setSecondScore(match.getSecondScore() + 1);
							tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), TennisConst.MATCH_STATUS_KET_THUC);
							// Update Id player win to next match.
							if(match.getStt() % 2 == 0){
								tennisMatchDAO.updateSecondPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
							} else {
								tennisMatchDAO.updateFirstPlayerId(match.getMapMatchId(), match.getFirstPlayerId());
							}
						} else {
							// Chưa thắng Trận
							// Update match score và trạng thái trận đấu.
							match.setSecondScore(match.getSecondScore() + 1);
							tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), currentSet.getValue()+1);
							// Tạo 1 bản ghi mới cho SET (nếu set hiện tại < tổng số set của trận đấu). 
							if(currentSet.getValue() < match.getTotalSet()) {
								BigDecimal setId = tennisSetDAO.insertRow(match.getId(), currentSet.getValue()+1, TennisSet.SET_STATUS_ONGOING);
								// Tạo 1 bản ghi mới cho Game đấu.
								BigDecimal gameId = tennisGameDAO.insertRow(match.getId(), setId, currentServe, TennisGame.TYPE_GAME);
								// Update lại Game hiện tại, SET hiện tại, reset điểm hiện tại về 0 - 0 vào bảng TENNIS_MATCH.
								tennisMatchDAO.updateCurrentInfo(match.getId(), "0", "0", currentServe, currentSet.getValue()+1, gameId);
							}
						}
					} else {
						 //
						 // Trường hợp chưa thắng set tie-break
						 //
						// Thêm 1 bản ghi vào bảng TENNIS_EVENT.
						tieBreakScore2 += 1;
						if((tieBreakScore2 >= 6 && tieBreakScore2 - tieBreakScore1 >= 1) 
							|| (tieBreakScore1 >= 6 && tieBreakScore1 - tieBreakScore2 >= 1) ) {
							specialPoint = TennisEvent.SPECIAL_SET_POINT;
						}
						tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), tieBreakScore1+"", tieBreakScore2+"", specialPoint, currentServe);
						if( tieBreakScore1 == 0 && tieBreakScore2 == 1) { // Loạt tie-break đầu tiên
							// Update chuyển quyền giao bóng cho tay vợt còn lại
							if(currentServe == 1) currentServe = 2;
							else if (currentServe == 2) currentServe = 1;
						} else {
							// Kiểm tra: nếu đã giao bóng 2 lần liên tiếp --> chuyển giao bóng.
							int totalTieBreak = tieBreakScore1 + tieBreakScore2 - 1;
							if(totalTieBreak != 0 && totalTieBreak % 2 == 0) {
								if(currentServe == 1) currentServe = 2;
								else if (currentServe == 2) currentServe = 1;
							}
							// Xong việc kiểm tra chuyển giao bóng
						}
						//tennisGameDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getScore1(), currentGame.getScore2(), currentServe, gameType);
						// Update điểm hiện tại vào bảng CURRENT_POINT của bảng TENNIS_MATCH
						tennisMatchDAO.updateCurrentPointAndServe(match.getId(), tieBreakScore1+"", tieBreakScore2+"", currentServe);
					}
  	   	        } else {
	        	    // Kiểm tra các trường hợp có thể tạo ra thắng (GAME/SET/MATCH)
	        	    if( isWinGame(match.getCurrentGamePoint2(), currentGamePoint1) ) {
	        	    	// Trường hợp thắng GAME đấu.
	        	    	if(currentServe == 1) currentServe = 2;
						else if (currentServe == 2) currentServe = 1;
	        	    	// Ghi dữ liệu vào bảng Tennis_Event
	        	    	BigDecimal nextSetId = BigDecimal.ZERO; 
	        	    	int nextSet = currentSet.getValue();
	        	    	// Kiểm tra xem có Thắng SET đấu không
	        	    	boolean isWinSet = false;
	        	    	boolean isWinMatch = false;
	        	    	if(isWinSet(currentSet.getScore2(), currentSet.getScore1())) {
	        	    		isWinSet = true;
	        	    		// Update Score, Trạng thái ở bảng TENNIS_SET
	        	    		tennisSetDAO.updateScore(currentSet.getId(), currentSet.getScore1(), currentSet.getScore2()+ 1, TennisSet.SET_STATUS_FINISH);
	        	    		// Kiểm tra xem có win match hay không
	        	    		if(isWinMatch(match.getSecondScore(), match.getFirstScore(), match.getTotalSet())) {
	        	    			// win match
	        	    			isWinMatch = true;
	        	    			// Update lại SCORE ở bảng TENNIS_MATCH
								match.setSecondScore(match.getSecondScore() + 1);
								tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), TennisConst.MATCH_STATUS_KET_THUC);
								// Update ID player thắng vào trận đấu kế tiếp (nếu có) đc xác định bằng MAP_MATCH_ID
								if(match.getStt() % 2 == 0) {
									tennisMatchDAO.updateSecondPlayerId(match.getMapMatchId(), match.getSecondPlayerId());
								} else {
									tennisMatchDAO.updateFirstPlayerId(match.getMapMatchId(), match.getSecondPlayerId());
								}
								//if(true)return;
	        	    		} else {
	        	    			nextSet = currentSet.getValue()+1;
	        	    			// Update lại SCORE và STATUS ở bảng TENNIS_MATCH
								match.setSecondScore(match.getSecondScore() + 1);
								tennisMatchDAO.updateScoreAndStatus(match.getId(), match.getFirstScore(), match.getSecondScore(), nextSet);
	        	    			// Tạo tiếp 1 bản ghi cho set MỚI (nếu set đấu hiện tại < tổng SET quy định của trận) cập nhật set hiện tại vào bảng football match.
	        	    			nextSetId = tennisSetDAO.insertRow(match.getId(), nextSet, TennisSet.SET_STATUS_ONGOING);
	        	    		}
	        	    	} else {
	        	    		// Không thắng SET.
	        	    		// Update lại SCORE ở bảng TENNIS_SET.
	        	    		tennisSetDAO.updateScore(currentSet.getId(), currentSet.getScore1(), currentSet.getScore2() + 1, TennisSet.SET_STATUS_ONGOING);
	        	    	}
	        	    	// Update Score vào bảng TENNIS_GAME
	        	    	tennisGameDAO.updateScore(currentGame.getId(), currentGame.getScore1(), currentGame.getScore2()+ 1);
	        	    	// Tạo mới 1 bản ghi cho GAME Đấu tiếp theo.
	        	    	if( nextSetId.equals(BigDecimal.ZERO) ) {
	        	    		// Game đấu của SET hiện tại
	        	    		nextSetId = currentSet.getId();
	        	    	}
	        	    	BigDecimal nextGameId = BigDecimal.ZERO;
	        	    	// Trận đấu kết thúc thì không tạo thêm game đấu.
	        	    	if(isWinSet && !isWinMatch){
	        	    		nextGameId = tennisGameDAO.insertRow(match.getId(), nextSetId, 0, 0, currentServe, gameType);
	        	    	} else if(!isWinMatch) {
	        	    		if(currentSet.getScore1() == 5 && currentSet.getScore2() == 6){
	        	    			gameType = TennisGame.TYPE_TIE_BREAK;
	        	    		} else {
	        	    			gameType = TennisGame.TYPE_GAME;
	        	    		}
	        	    		nextGameId = tennisGameDAO.insertRow(match.getId(), nextSetId, currentSet.getScore1(), currentSet.getScore2() + 1, currentServe, gameType);
	        	    	}
	        	    	// Update tay vợt giao bóng, CurrentScore ở bảng TENNIS_MATCH.
	        	    	tennisMatchDAO.updateCurrentInfo(match.getId(), "0", "0", currentServe, nextSet, nextGameId);
	        	    } else {
	        	    	// Không thắng game đấu
	        	    	if ("40".equals(match.getCurrentGamePoint2()) && "A".equals(match.getCurrentGamePoint1())) {
	        	    		point2 = "40";
	        	    		match.setCurrentGamePoint1("40");
	        	    	} else if ("30".equals(match.getCurrentGamePoint2())) {
	        	    		// Xác định xem có phải là điểm đặc biệt không (Break point, SET point, match point)
		                    // Nếu point1 hiện tại = 30 và point2 <= 30 và tay vợt 2 đang cầm giao bóng => tay vợt 1 có cơ hội dành break point
		                    if(( !"A".equals(match.getCurrentGamePoint1()) && !"40".equals(match.getCurrentGamePoint1()) ) && currentServe == 1 ) {
		                        specialPoint = SPECIAL_BREAK_POINT;
		                        // kiểm tra xem có thể giành set point hay không.
		                        if( (currentSet.getScore2() == 5 || currentSet.getScore2() == 6) 
		                            && (currentSet.getScore2() - currentSet.getScore1() >= 1) ) {
		                            specialPoint = SPECIAL_MATCH_POINT_SET_POINT; // Tay vợt vừa giành được break-point vừa giành được SET point
		                        }
		                    }
		                    point2 = "40";
	        	    	} else if ("40".equals(match.getCurrentGamePoint2()) && "40".equals(match.getCurrentGamePoint1())) {
	        	    		// Xác định xem có phải là điểm đặc biệt không (Break point, SET point, match point)
		                    // Nếu point1 hiện tại = 30 và point2 <= 30 và tay vợt 2 đang cầm giao bóng => tay vợt 1 có cơ hội dành break point
		                    if( currentServe == 1 ) {
		                        specialPoint = SPECIAL_BREAK_POINT;
		                        // kiểm tra xem có thể giành set point hay không.
		                        if( (currentSet.getScore2() == 5 || currentSet.getScore2() == 6) 
		                            && (currentSet.getScore2() - currentSet.getScore1() >= 1) ) {
		                            specialPoint = SPECIAL_MATCH_POINT_SET_POINT; // Tay vợt vừa giành được break-point vừa giành được SET point
		                        }
		                    }
	                        point2 = "A";
	        	    	} else if("0".equals(match.getCurrentGamePoint2())) {
	                        point2 = "15";
	                    } else if ("15".equals(match.getCurrentGamePoint2())) {
	                        point2 = "30";
	                    }	
	        	    	// Thêm event vào bảng TENNIS EVENT
	        	    	tennisEventDAO.insertRow(match.getId(), currentSet.getId(), currentGame.getId(), match.getCurrentGamePoint1(), point2, specialPoint, currentServe);
	        	    	// Update Current Score Game vào bảng Tennis match.
	        	    	tennisMatchDAO.updateCurrentPointAndServe(match.getId(), match.getCurrentGamePoint1(), point2, currentServe, currentSet.getValue());
	        	    }
        	    }
        	   
        	}
        	
        	//match = tennisMatchDAO.getMatchResult(new BigDecimal(sId));
        	match = tennisMatchDAO.getMatchResult(new BigDecimal(sId));
        %>
        <div class="grid_12">
        	<%
               	if(match != null && match.getFirstPlayerId() != null && match.getSecondPlayerId() != null) {
               		// Kiểm tra xem đã có dữ liệu ở bảng TENNIS_SET chưa
               		// Nếu chưa có Insert vào: VALUE = 1,
               		TennisSet currSet = tennisSetDAO.getCurrentSetOfMatch(match.getId());
               		// Chưa có set nào đc tạo
               		if(currSet == null ) {
               			// insert vào bảng TENNIS_SET
               			BigDecimal setId = tennisSetDAO.insertRow(match.getId(), TennisSet.SET1, TennisSet.SET_STATUS_ONGOING);
               			BigDecimal gameId = BigDecimal.ZERO; 
               			if(!BigDecimal.ZERO.equals(setId)) {
	               			// insert vào bảng TENNIS_GAME
	               			gameId = tennisGameDAO.insertRow(match.getId(), setId, (match.getCurrentPlayerServe() != 0 ? match.getCurrentPlayerServe():1 ), TennisGame.TYPE_GAME);
               			}
               			// Cập nhật thông tin vào bảng TENNIS_MATCH.
               			tennisMatchDAO.updateCurrentInfo(match.getId(), "0", "0", (match.getCurrentPlayerServe() != 0 ? match.getCurrentPlayerServe():1 ), TennisSet.SET1, gameId);
               			match.setCurrentGamePoint1("0");
               			match.setCurrentGamePoint2("0");
               		}
               		
               	    TennisPlayer player1 = (TennisPlayer) TennisBuffer.getPlayerFromId(match.getFirstPlayerId());
               	    if(player1 == null){
               	        player1 = TennisBuffer.reloadPlayer(match.getFirstPlayerId());
               	    }
                    TennisPlayer player2 = (TennisPlayer) TennisBuffer.getPlayerFromId(match.getSecondPlayerId());
                    if(player2 == null){
                        player2 = TennisBuffer.reloadPlayer(match.getSecondPlayerId());
                    }
                    if(player1 == null || player2 == null) {
                        out.println("Không tìm thấy thông tin tay vợt");
                        return;
                    }
           	%>
           	<div class="box round first grid">
                <h2>Tường thuật trận đấu</h2>
                <div class="block">
                	<form name="formLive" method="post">
                		<input type="hidden" name="action"/>
                		<input type="hidden" name="playerScore"/>
	                    <table class="data display datatable" id="example">
							<tbody>
								<tr class="eventt">
									<td align="right" style="width: 30%">
										<span onclick="f_change_serve1();" style="margin-right: 20px;" title="<%= player1 != null ? player1.getName():"" %> giao bóng">
											<input  
												type="radio" <%= match.getCurrentPlayerServe() != 2 ? "checked":"" %> name="rdoServe" value="1" />
										</span>
										<strong><%= player1 != null ? player1.getName():"" %></strong>
									</td>
									<td align="center">
										<span style="vertical-align: top;">
											<select name="clbStatus" style="font-family:Arial,Tahoma; font-size=8pt" class="select_status"
									         	onchange="updateSts('<%=match.getId()%>', ''+this.value+'', '_liveFilter_<%=match.getId()%>', '<%=( (player1 != null ? player1.getName():"Tay vợt 1") + " - " + (player2 != null ? player2.getName():"Tay vợt 2") )%>')">
									                <option value=<%=TennisConst.MATCH_STATUS_CHUA_DANH %> <%=(TennisConst.MATCH_STATUS_CHUA_DANH == match.getStatus()?"selected":"") %> >Ch.đánh</option>
									                <option value=<%=TennisConst.MATCH_STATUS_SET1 %> <%=(TennisConst.MATCH_STATUS_SET1 == match.getStatus()?"selected":"") %>>Set 1</option>
									                <option value=<%=TennisConst.MATCH_STATUS_SET2 %> <%=(TennisConst.MATCH_STATUS_SET2 == match.getStatus()?"selected":"") %>>Set 2</option>
									                <option value=<%=TennisConst.MATCH_STATUS_SET3 %> <%=(TennisConst.MATCH_STATUS_SET3 == match.getStatus()?"selected":"") %>>Set 3</option>
									                <option value=<%=TennisConst.MATCH_STATUS_SET4 %> <%=(TennisConst.MATCH_STATUS_SET4 == match.getStatus()?"selected":"") %>>Set 4</option>
									                <option value=<%=TennisConst.MATCH_STATUS_SET5 %> <%=(TennisConst.MATCH_STATUS_SET5 == match.getStatus()?"selected":"") %>>Set 5</option>
									                <option value=<%=TennisConst.MATCH_STATUS_KET_THUC %> <%=(TennisConst.MATCH_STATUS_KET_THUC == match.getStatus()?"selected":"") %>>K.thúc</option>
									                <option value=<%=TennisConst.MATCH_STATUS_HOAN %> <%=(TennisConst.MATCH_STATUS_HOAN == match.getStatus()?"selected":"") %>>Hoãn</option>
									        </select>
								        </span>
								        <span style="margin-bottom: 0px;">
								        	<img style="cursor: pointer;" align="absmiddle" src="<%= request.getContextPath() %>/admin/tennis/img/edit_undo.png" title="Quay lại trước" 
								        		onclick="if(confirm('Bạn có chắc chắn muốn quay lại bước trước ??? ')){f_undo();}" />
								        </span>
									</td>
									<td style="width: 30%">
										<strong><%= player2 != null ? player2.getName():"" %></strong>
										<span onclick="f_change_serve2();" style="margin-left: 20px;" title="<%= player2 != null ? player2.getName():"" %> giao bóng">
											<input <%= match.getCurrentPlayerServe() == 2 ? "checked":"" %> type="radio" name="rdoServe" value="2" />
										</span>
									</td>
								</tr>
								<tr class="eventt">
									<td align="right" style="padding-right: 10px;">
										<table class="data display datatable" id="example">
											<tr>
												<td align="right">
													<a  onclick="f_increase_score1();"
														href="javascript:void();" class="btn-mini btn-black btn-plus" title="Plus"><span></span>Add</a>
												</td>
											</tr>
											<tr>
												<td align="right" class="current_point1">
													<label><%= match.getCurrentGamePoint1() != null ? match.getCurrentGamePoint1():"0" %></label>
												</td>
											</tr>
										</table>
									</td>
									<td>
										<table class="data display datatable" id="example">
										    <%
										      if(match.getTotalSet() >= 3) {
										    %>
											<tr>
												<td class="column_tt tiebreak_tt width25">
												    <span id="firstTiaBreakSet1Score_<%= match.getId()%>">
												    	<%= match.getFirstTieBreakSet1Score()  != 0 ? match.getFirstTieBreakSet1Score():""%>
												    </span>
												</td>
												<td class="column_tt score_tt width25">
												    <span id="firstSet1Score_<%= match.getId()%>">
												    	<%= match.getFirstSet1Score() %>
												    </span>
												</td>
												<td class="column_tt score_tt width25">
												    <span id="secondSet1Score_<%= match.getId()%>">
												    	<%= match.getSecondSet1Score() %>
												    </span>
												</td>
												<td class="column_tt tiebreak_tt width25">
												    <span id="secondTiaBreakSet1Score_<%= match.getId()%>">
												    	<%= match.getSecondTieBreakSet1Score() != 0 ? match.getSecondTieBreakSet1Score():"" %>
												    </span>
												</td>
											</tr>
											<tr>
												<td class="column_tt tiebreak_tt">
                                                    <span id="firstTiaBreakSet2Score_<%= match.getId()%>"><%= match.getFirstTieBreakSet2Score() != 0 ? match.getFirstTieBreakSet2Score():"&nbsp;" %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                    <span id="firstSet2Score_<%= match.getId()%>"><%= match.getFirstSet2Score() %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                    <span id="secondSet2Score_<%= match.getId()%>"><%= match.getSecondSet2Score() %></span>
                                                </td>
                                                <td class="column_tt tiebreak_tt">
                                                    <span id="secondTiaBreakSet2Score_<%= match.getId()%>"><%= match.getSecondTieBreakSet2Score() != 0 ? match.getSecondTieBreakSet2Score():"&nbsp;" %></span>
                                                </td>
											</tr>
											<tr>
												<td class="column_tt tiebreak_tt">
                                                    <span id="firstTiaBreakSet3Score_<%= match.getId()%>"><%= match.getFirstTieBreakSet3Score() != 0 ? match.getFirstTieBreakSet3Score():"&nbsp;" %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                    <span id="firstSet3Score_<%= match.getId()%>"><%= match.getFirstSet3Score() %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                    <span id="secondSet3Score_<%= match.getId()%>"><%= match.getSecondSet3Score() %></span>
                                                </td>
                                                <td class="column_tt tiebreak_tt">
                                                    <span id="secondTiaBreakSet3Score_<%= match.getId()%>"><%= match.getSecondTieBreakSet3Score() != 0 ? match.getSecondTieBreakSet3Score():"&nbsp;" %></span>
                                                </td>
											</tr>
											<% 
											  }
											  if(match.getTotalSet() == 5) {
											%>
											<tr>
                                                <td class="column_tt tiebreak_tt">
                                                	<span id="firstTiaBreakSet4Score_<%= match.getId()%>"><%= match.getFirstTieBreakSet4Score() != 0 ? match.getFirstTieBreakSet4Score():"&nbsp;" %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                	<span id="firstSet4Score_<%= match.getId()%>"><%= match.getFirstSet4Score() %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                	<span id="secondSet4Score_<%= match.getId()%>"><%= match.getSecondSet4Score() %></span>
                                                </td>
                                                <td class="column_tt tiebreak_tt">
                                                	<span id="secondTiaBreakSet4Score_<%= match.getId()%>"><%= match.getSecondTieBreakSet4Score() != 0 ? match.getSecondTieBreakSet4Score():"&nbsp;" %></span>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td class="column_tt tiebreak_tt">
                                                	<span id="firstTiaBreakSet5Score_<%= match.getId()%>"><%= match.getFirstTieBreakSet5Score() != 0 ? match.getFirstTieBreakSet5Score():"&nbsp;" %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                	<span id="firstSet5Score_<%= match.getId()%>"><%= match.getFirstSet5Score() %></span>
                                                </td>
                                                <td class="column_tt score_tt">
                                                	<span id="secondSet5Score_<%= match.getId()%>"><%= match.getSecondSet5Score() %></span>
                                                </td>
                                                <td class="column_tt tiebreak_tt">
                                                	<span id="secondTiaBreakSet5Score_<%= match.getId()%>"><%= match.getSecondTieBreakSet5Score() != 0 ? match.getSecondTieBreakSet5Score():"&nbsp;" %></span>
                                                </td>
                                            </tr>
											<%
											  }
											%>
										</table>
									</td>
									<td style="padding-left: 10px;">
										<table class="data display datatable" id="example">
											<tr>
												<td align="left">
													<a  onclick="f_increase_score2();"
														href="javascript:void();" class="btn-mini btn-black btn-plus" title="Plus"><span></span>Add</a>
												</td>
											</tr>
											<tr>
												<td align="left" class="current_point2">
													<label><%= match.getCurrentGamePoint2() != null ? match.getCurrentGamePoint2():"0" %></label>
												</td>
											</tr>
										</table>
									</td>
								</tr>
							</tbody>
						</table>
						<table class="data display datatable" style="width: 50%;">
							<tr>
								<td align="center">
									<div class="ngang_trd"></div>
								    <div class="trd_all">
								        <div style="padding:4px 0 0 8px;">
								        	<a id="tt_hid" style="display: none;" href="event-set.jsp" class="trd_dh"></a>
								        	<a id="tt_set1" href="event-set.jsp?setId=<%= match.getSet1Id() != null ? match.getSet1Id():"0" %>" class="trd_dh">Set 1</a>
								            <a id="tt_set2" href="event-set.jsp?setId=<%= match.getSet2Id() != null ? match.getSet2Id():"0" %>" class="trd_dh">Set 2</a>
								            <a id="tt_set3" href="event-set.jsp?setId=<%= match.getSet3Id() != null ? match.getSet3Id():"0" %>" class="trd_dh">Set 3</a>
								            <% 
								            if(match.getTotalSet() == 5) {
								            %>
								            <a id="tt_set4" href="event-set.jsp?setId=<%= match.getSet4Id() != null ? match.getSet4Id():"0" %>" class="trd_dh">Set 4</a>
								            <a id="tt_set5" href="event-set.jsp?setId=<%= match.getSet5Id() != null ? match.getSet5Id():"0" %>" class="trd_dh">Set 5</a>
								            <%
								            }
								            %>
								        	<a style="display: none;" href=""></a>
								        </div>
								   	</div>
								   	<div class="css-panes">
									  <div style="display:block"></div>
									  <div></div>
									  <div></div>
									  <div></div>
									  <div></div>
									  <div></div>
									</div>
								</td>
							</tr>
						</table>
						<!-- activate tabs with JavaScript -->
						<script>
							var isFisrtLoad = true;
							//var hashURL1 = "";
							var i = 1;
							var j = 0;
							function dm(){
								var hashURL1 = window.location.hash;
								if(isFisrtLoad){
									<% if (match.getCurrentSet() == 1) { %>
										i = 1;
									<% } else if (match.getCurrentSet() == 2) { %>
										i = 2;
									<% } else if (match.getCurrentSet() == 3) { %>
										i = 3;
									<% } else if (match.getCurrentSet() == 4) { %>
										i = 4;
									<% } else if (match.getCurrentSet() == 5) { %>
										i = 5;
									<% } else { %>
										i = 1;
									<% }%> 
								}else{
									i = j;
								}
								$(function() {
							        $("div.trd_all").tabs("div.css-panes > div", {
								    effect: 'fade',
								    initialIndex: i,
								    onBeforeClick: function(event, i) {
										// get the pane to be opened
										var pane = this.getPanes().eq(i);
								        // only load once. remove the if ( ... ){ } clause if
								        // you want the page to be loaded every time
								        $("#tt_set1").removeClass("trd_dh");
										$("#tt_set2").removeClass("trd_dh");
										$("#tt_set3").removeClass("trd_dh");
										$("#tt_set4").removeClass("trd_dh");
										$("#tt_set5").removeClass("trd_dh");
										
								        $("#tt_set1").addClass("trd_dh");
										$("#tt_set2").addClass("trd_dh");
										$("#tt_set3").addClass("trd_dh");
										$("#tt_set4").addClass("trd_dh");
										$("#tt_set5").addClass("trd_dh");
					
										this.getTabs().eq(i).removeClass("trd_dh");
										pane.load(this.getTabs().eq(i).attr("href"));
										j = i;
										if( i == 1){
											//setTimeout("dm()", 30000);
										}
								    }
								});
							    });
								isFisrtLoad = false;
							}
						</script>
					</form>
                </div>
            </div>
            <% 
            	} else {
            %>
            <div class="box round first grid">
                <h2>Tường thuật trận đấu</h2>
                <div class="block">
                	<div class="message warning">
                        <h5>Cảnh báo !</h5>
                        <p>
                            Không tồn tại trận đấu có Id = <%= sId %>
                        </p>
                    </div>
              	</div>
            </div>
            <%
            	}
            %>
        </div>
        <div class="clear">
        </div>
    </div>
    <%@ include file="../include/footer.jsp" %>
</body>
</html>